package com.projectmanagement.model.dao;

public abstract class DAOFactory {

	/**
	 * Creates a standalone DAOFactory that returns unmanaged DAO beans for use
	 * in any environment Hibernate has been configured for. Uses
	 * HibernateUtil/SessionFactory and Hibernate context propagation
	 * (CurrentSessionContext), thread-bound or transaction-bound, and
	 * transaction scoped.
	 */
	public static final Class<?> HIBERNATE = com.projectmanagement.model.dao.hibernate.HibernateDAOFactory.class;

	/**
	 * Factory method for instantiation of concrete factories.
	 */
	public static DAOFactory instance(Class<?> factory) {
		try {
			return (DAOFactory) factory.newInstance();
		} catch (Exception ex) {
			throw new RuntimeException("Couldn't create DAOFactory: " + factory);
		}
	}

	// Add your DAO interfaces here

	public abstract CompanyDAO getCompanyDAO();

	public abstract FileDAO getFileDAO();

	public abstract GroupDAO getGroupDAO();

	public abstract MessageDAO getMessageDAO();

	public abstract PermissionDAO getPermissionDAO();

	public abstract PriorityLevelDAO getPriorityLevelDAO();

	public abstract ProjectCommentDAO getProjectCommentDAO();

	public abstract ProjectDAO getProjectDAO();

	public abstract ProjectFileDAO getProjectFileDAO();

	public abstract ProjectMessageDAO getProjectMessageDAO();

	public abstract ProjectMilestoneDAO getProjectMilestoneDAO();

	public abstract ProjectPermissionDAO getProjectPermissionDAO();

	public abstract ProjectTaskDAO getProjectTaskDAO();

	public abstract ProjectTaskListDAO getProjectTaskListDAO();

	public abstract ProjectUserDAO getProjectUserDAO();

	public abstract ReceivedMessageDAO getReceivedMessageDAO();

	public abstract RoleDAO getRoleDAO();

	public abstract SentMessageDAO getSentMessageDAO();

	public abstract UserDAO getUserDAO();
}
